/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package jpa.session;

import java.util.ArrayList;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.PersistenceContext;
import jpa.entities.Produto;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;

/**
 *
 * @author carlos
 */
@Stateless
public class ProdutoFacade extends AbstractFacade<Produto> {
    @PersistenceContext(unitName = "LaCruz_v2PU")
    private EntityManager em;
    private EntityManagerFactory emf;


    protected EntityManager getEntityManager() {
        if (em == null){
            emf = Persistence.createEntityManagerFactory("LaCruz_v2PU");
            em = emf.createEntityManager();
        }
          return em;
    }

    public ProdutoFacade() {
        super(Produto.class);
    }

    public List<Produto> findFilters(Produto produto) {
        CriteriaBuilder builder = getEntityManager().getCriteriaBuilder();
        CriteriaQuery<Produto> query = builder.createQuery(Produto.class);
        Root<Produto> Produto = query.from(Produto.class);

        List<Predicate> predicateList = new ArrayList<Predicate>();
        if(produto.getColecao()!=null){
            predicateList.add(builder.equal(Produto.get("colecao"), produto.getColecao()));
        }
        if(produto.getTamanho()!= null){
            predicateList.add(builder.equal(Produto.get("tamanho"), produto.getTamanho()));
        }
        if(produto.getModelo()!= null){
            predicateList.add(builder.equal(Produto.get("modelo"), produto.getModelo()));
        }
        if(produto.getCor()!= null){
            predicateList.add(builder.equal(Produto.get("cor"), produto.getCor()));
        }
         Predicate[] predicates = new Predicate[predicateList.size()];
        query.where(predicateList.toArray(predicates));
        query.select(Produto);

        List<Produto> teste = getEntityManager().createQuery(query).getResultList();
        return teste;

    }
      

}
